%% 全连接神经网络Fully connected neural network
input=x;% 输入数据，列数代表样本数
output=y;% 响应
n=length(output);
n1=ceil(0.7*n);% 训练数据个数
% 将指标变为列向量，划分训练样本和测试样本
input_train=input(1:n1,:)';
output_train=output(1:n1,:)';
input_test=input(n1+1:end,:)';
output_test=output(n1+1:end,:)';
% 节点数设置
inputnum=10;% 输入层节点数，即x维度数
hiddennum=10;% 隐含层数目
outputnum=1;% 输出层数目
% 数据归一化处理
[inputn,inputps]=mapminmax(input_train);% 归一化到[-1,1]之间
[outputn,outputps]=mapminmax(output_train);
% 构建网络
net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');% 模型
% 隐含层使用tansig激活函数，输出层使用purelin线性函数，使用梯度下降法训练
W1=net.IW{1,1};% 输入层到中间层权值
B1=net.b{1};% 中间各层神经元阈值
W2=net.LW{2,1};% 中间层到输出层权值
B2=net.b{2};% 输出层各神经元阈值
% 训练参数配置
net.trainParam.epochs=1000;% 训练迭代次数
net=train(net,inputn,outputn);% 进行训练
% 测试
inputn_test=mapminmax('apply',input_test,inputps);
an=sim(net,inputn_test);
test_simu=mapminmax('reverse',an,outputps);% 对预测结果反归一化